package com.itheima.reggie.controller;

import com.itheima.reggie.common.OSSClient;
import com.itheima.reggie.common.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

@Slf4j
@RestController
@RequestMapping("/common")
public class CommonController {
    /*
          使用云服务器储存和传输
     */

    @Autowired
    private OSSClient ossClient;
    @Value("${aliyun.ossUrlPrefx}")
    private String ossUrlPrefx;

    /**
     *文件上传云服务器
     **/
    @PostMapping("/upload")
    public R<String> upload(MultipartFile file) {
        //file是一个临时文件，需要转存到指定位置，否则本次请求完成后临时文件会删除
        log.info(file.toString());
        //原始文件名
        String originalFilename = file.getOriginalFilename();//abc.jpg
        String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
        //使用UUID重新生成文件名，防止文件名称重复造成文件覆盖
        String fileName = UUID.randomUUID().toString() + suffix;//dfsdfdfd.jpg

        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        String format = dateFormat.format(new Date());//2022-05-09/dfsdfasfadfsdfsdfsdgdfd.jpg
        fileName = format+"/"+fileName;
        try {
            ossClient.upload(fileName, file.getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return R.success(ossUrlPrefx + fileName);
    }

//    @GetMapping("/download")
//    public void download(String name, HttpServletResponse response){
//         ossClient.download(name,response);
//    }

//    //注入一个路径属性
//    @Value("${reggie.path}")
//    private String basePath;
//
//
//    @PostMapping("/upload")
//    public R<String> upload(MultipartFile file) {
//        /*
//        浏览器点击图片上传ok后发送请求过来  file: (binary)
//        我们作为服务器，需要将文件暂时先转存到一个地方
//         */
//        //获取原始文件名 00874a5e-0df2-446b-8f69-a30eb7d88ee8.png
//        String filename = file.getOriginalFilename();
//        String substring = filename.substring(filename.lastIndexOf("."));
//        //生成不重复的新文件名
//        String newfilename = UUID.randomUUID().toString() + substring;
//
//        //创建目录
//
//        File dir = new File(basePath);
//        //判断当前目录是否存在
//        if (!dir.exists()) {
//            //目录不存在，需要创建
//            dir.mkdirs();
//        }
//        //存在就存进去
//        try {
//            //将临时文件转存到指定位置
//            file.transferTo(new File(basePath + newfilename));
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//        return R.success(newfilename);
//    }
//
//    /**
//     * 文件下载
//     * @param name
//     * @param response
//     */
//    @GetMapping("/download")
//    public void download(String name, HttpServletResponse response){
//        log.info(name); //03e65184-ab3b-4be9-b00e-c0a7f8baf4e8.png
//        /*
//             读取之前转存的图片 放到网络中
//         */
//        try {
//            //输入流  读取转存的图片
//            FileInputStream fis = new FileInputStream(new File(basePath + name));
//            //输出流  response回应给浏览器
//            ServletOutputStream os = response.getOutputStream();
//            //设置类型  告诉浏览器文件的类型
//            response.setContentType("image/jpeg");
//            //开始读取
//            int len = 0;
//            byte[] bytes = new byte[1024];
//            while ((len=fis.read(bytes))!=-1){
//                os.write(bytes,0,len);
//                os.flush();
//            }
//            os.close();
//            fis.close();
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//    }

}



